Move package flag handling into cargo_compile
authortorkleyy <thomas-schaller2000@gmx.de>
Fri, 12 May 2017 12:16:48 +0000 (14:16 +0200)
committertorkleyy <thomas-schaller2000@gmx.de>
Sat, 27 May 2017 18:33:00 +0000 (20:33 +0200)
src/bin/build.rs
src/cargo/ops/cargo_compile.rs

index 650e256dafeb6eed157ef0cd25f4d23e40b5ffd3..759c2746646d3163d754646ae29523ff4a6ed1f0 100644 (file)
@@ -93,13 +93,9 @@ pub fn execute(options: Options, config: &Config) -> CliResult {
 
     let root = find_root_manifest_for_wd(options.flag_manifest_path, config.cwd())?;
 
-    let spec = match (options.flag_all, &options.flag_exclude) {
-        (true, exclude) if exclude.is_empty() => Packages::All,
-        (true, exclude) => Packages::OptOut(exclude),
-        (false, exclude) if !exclude.is_empty() => panic!("--exclude can only be used together \
-                                                           with --all"),
-        _ => Packages::Packages(&options.flag_package),
-    };
+    let spec = Packages::from_flags(options.flag_all,
+                                    &options.flag_exclude,
+                                    &options.flag_package)?;
 
     let opts = CompileOptions {
         config: config,
index 59e9fbcb74c864815f4780d160e43481d9fc4ff7..81e757c02c7e7da05b9119b49cc7b97a74bc01d8 100644 (file)
@@ -110,6 +110,20 @@ pub enum Packages<'a> {
 }
 
 impl<'a> Packages<'a> {
+    pub fn from_flags(all: bool, exclude: &'a Vec<String>, package: &'a Vec<String>)
+        -> CargoResult<Self>
+    {
+        let packages = match (all, &exclude) {
+            (true, exclude) if exclude.is_empty() => Packages::All,
+            (true, exclude) => Packages::OptOut(exclude),
+            (false, exclude) if !exclude.is_empty() => bail!("--exclude can only be used together \
+                                                           with --all"),
+            _ => Packages::Packages(package),
+        };
+
+        Ok(packages)
+    }
+
     pub fn into_package_id_specs(self, ws: &Workspace) -> CargoResult<Vec<PackageIdSpec>> {
         let specs = match self {
             Packages::All => {